Øyvind Kolås [Fri, 29 Oct 2021 01:34:36 +0000 (03:34 +0200)]
Oklab: disable only Oklch not Oklab
Oklab itself is enabled by default now for testing, but does not seem to
produce correct values with the Oklab test vectors, even with manual
attempt at converting the test vector (presumed) CIE XYZ D65 to CIE XYZ
D50 before running the conversion.
The failure to pass symmetry tests as mentioned in issue #63 seems to be
limited to Oklch, Oklab itself is fine.
Jehan [Wed, 3 Mar 2021 10:03:38 +0000 (11:03 +0100)]
babl: re-creation of palette conversions must always set data.
If we allow conversions to be recreated for palettes, it will create a
new identical conversion with collision number incremented in the name
and no user data. Yet the user data is extremely important for palette
conversions, because it contains the palette itself which is required by
the palette conversion functions. Hence we end up crashing.
Moreover, although I think that right now, only palette conversions use
the data field, it might be used for other type of data in the future.
In any case, we should always save this data along as it has been stored
there for a reason.
Finally in babl-palette code, make sure the user data is added to the
models before creating the formats and conversions as we also ended up
in crash-happy code when we didn't.
Jehan [Wed, 3 Mar 2021 09:54:38 +0000 (10:54 +0100)]
babl: do not append space to the format name when explicitly set.
When a format is named explicitly by the caller, we should just keep the
same name, not tweak it. Generating a name is only valid when no
explicit name is given. Moreover this is the behavior as described in
the docs of babl_format_new():
> If no name is provided a (long) descriptive name is used.
(which usually implies that with a name provided, this one will be used
instead of a generated name)
This is especially important for palette formats for which name is
mostly not descriptive anyway (either caller-set or generated by babl
with incremental number) and this fixes a bug when calling
babl_new_palette_with_space() with the same name and space would fail to
find the already created formats (yet would find the models and return
NULL for both formats) because it would search without the space
description appended. Yet the docs of babl_new_palette*() clearly says
as well:
> If you pass in the same name the previous formats will be provided
> again.
Moreover we actually already tweak a bit the palette format name by
appending the space pointer. No need to tweak it twice appending the
same information (space) in a different way.
See also: https://gitlab.gnome.org/GNOME/gimp/-/issues/6501
John [Fri, 26 Feb 2021 07:19:44 +0000 (07:19 +0000)]
build: subproject improvements:
- don't expose source in dependency to avoid name clashes
- add babl path variables to dependency object
- add babl path variables to uninstalled pc
Recently Arch has changed its glibc package to require kernel
4.4[1] as a poor man's attempt to disable faccessat2 syscall that
is known to cause problems with old libseccomp and Docker. Downgrade
glibc to the pkgrel before the change and ensure it's not upgraded.
Additionally switch to the official Arch Linux image in the library
namespace. The base image has been deprecated.
Øyvind Kolås [Mon, 30 Nov 2020 04:11:18 +0000 (05:11 +0100)]
babl: fix bug in caching of CMYK profiles
The check for duplicates was gumming up the CMYK profile initialization,
causing babl internal CMYK to be used instead and the original icc
profile to be lost.
John Marshall [Wed, 24 Jun 2020 17:00:38 +0000 (18:00 +0100)]
build: clean up version script handling
- ensure that symbol list dependency is correctly handled
- add shebang to python script to let meson do the interpreter selection
John Marshall [Wed, 20 May 2020 11:34:44 +0000 (12:34 +0100)]
build: improve doc build
- change build option to auto/true/false
- auto=false if cross build true otherwise
- replace xml_insert.sh with python script to allow doc gen on msys
Øyvind Kolås [Sun, 24 May 2020 01:15:07 +0000 (03:15 +0200)]
babl: progressively increase search depth from 2 to 4
Follow-on from previous commit, the specific paths looked for
that are longer than 2 involving formats with spaces are 3
steps long. Doing a 4 step deep search in these common cases
still introduces noticable "warm-up" jankiness in GIMP.
To additionally ensure we're not missing used valid and faster
than reference conversions in GIMP-2.10 we do an additional
search at depth 5 when no converison had been found *and* the
destination format has a space differing from sRGB.
Øyvind Kolås [Sat, 23 May 2020 16:53:36 +0000 (18:53 +0200)]
babl: search depth of 2 and 4, instead of 2 and 5
Conversions needed for color management in GIMP are not feasible in 2
steps, searching 5 deep for commonly used conversions causes severe UI
stalls, lowering the max search depth to 4 avoids this regression
introduced in 51437f216dbbef80f9bf661dd152452083119349, while keeping
the speed-up for other cases.
Ell [Mon, 18 May 2020 17:47:49 +0000 (20:47 +0300)]
palette: delay sorted radius vectors construction until needed
In babl-palette, when C11 atomic operations are available, don't
construct the sorted radius vectors on palette setup, but rather
when first converting from RGB to the palette format. This avoids
the costly vector-construction step for palettes that are never
used as the destination format of a conversion.
Ell [Mon, 18 May 2020 06:53:58 +0000 (09:53 +0300)]
HSV, HSL, HCY: wrap hue around during conversion to RGB
In the conversions from HSV, HSL, and HCY to RGB, wrap the hue
value around to the [0,1) range, instead of producing unspecified
results outside this range. In particular, hue=1.0 may arise when
going through lower precision, such as when decomposing/recomposing
an 8-bit image in GIMP (see gimp#5097).
Øyvind Kolås [Fri, 15 May 2020 00:56:46 +0000 (02:56 +0200)]
babl: adjust search depth for fishes in first pass
Search first only to a depth of 2, and accept the fastest found if any
faster than reference is found, if not search to depth 5. We lose out in
the unlikely to be frequent cases where 2-step babl fishes exist and a 3
step fish is faster. And gain the fishes where 4 step is faster than 3
(which was the old first pass search depth).
Øyvind Kolås [Thu, 14 May 2020 15:53:50 +0000 (17:53 +0200)]
babl: slightly pad source buffers for creating conversions
This is done because many babls conversions get optimized by C compilers
to read 16bytes of data at a time. Causing valgrind to report
"Invalid read of size 16" as a false positive. By padding the data at
least when creating conversions we mask the false positives.
avx2-int8: add gamma u8 -> linear float conversions
Add AVX2 conversions from u8 Y', Y'A, R'G'B, and R'G'B'A to float
Y, YA, RGB, and RGBA, respectively. The conversions use an LUT
together with the AVX2 gather instructions to process 8 values a
once. Depending on the formats and cache utilization, the new
conversions are between 1.25x to 2.2x faster than the existing
conversions.
Øyvind Kolås [Sat, 15 Feb 2020 06:22:25 +0000 (07:22 +0100)]
babl: babl-fish-path improve portability for ppc
Quoting his explaination for why this fixes things (the other half of
the same function was already portable.)
"This breaks on PowerPC 32-bit, because the calling convention for
passing a union is to pass a pointer to a temporary copy of the union.
This pointer isn't as a function pointer. On some other platforms, the
call would just copy the union, which is like copying the function
pointer. On all platforms, the compiler doesn't check the type, because
babl_conversion_new() has a va_arg(3) prototype."
Portabilitiy issue figured out by George Koehler, This fixes issue #24.
Øyvind Kolås [Sun, 12 Jan 2020 22:47:08 +0000 (23:47 +0100)]
meson: globally opt out of unsafe math optimizations
Thus closing issue #49, with a decision to opt for fully predictable
math, and increasing the ability to extend the use of hashes in result
image tests in GEGL.